ARFoundation之路-ARSession & ARSessionOrigin 您所在的位置:网站首页 camera ar ARFoundation之路-ARSession & ARSessionOrigin

ARFoundation之路-ARSession & ARSessionOrigin

2024-07-04 04:09| 来源: 网络整理| 查看: 265

版权声明:Davidwang原创文章,严禁用于任何商业途径,授权后方可转载。

  在之前的工程里,我们首先在Hierarchy窗口中添加了ARSession和ARSessionOrigin两个对象,这两个对象构建起了AR应用的最基础的框架,所有其他工作都在这基础之上展开,那么,这两个对象在整个AR应用中起什么作用?

在这里插入图片描述

(一)ARSession

  ARSession对象主要包括两个组件,一个就是ARSession,管理Session,另一个是AR Input Manager,管理输入相关信息,如下图所示。AR中Session(中文翻译为会话)用来管理 AR 应用的状态、处理 AR 应用生命周期,是 AR API的主要入口,由其控制在目标平台上启用或禁用AR。在Unity 对应的生命周期方法中需要处理 Session 的生命周期,这样 AR 应用会根据需要开始或暂停相机帧的采集,初始化或释放相关的资源。AR场景必须包括ARSession组件,但ARSession可以挂在任何场景对象上,一般为便于管理,我们将其挂载在ARSession对象上。

  AR Input Manager组件是启用世界跟踪所必需的组件,不启用此组件,Tracked Pose Driver(跟踪姿态驱动)将无法获取设备的姿态。 在这里插入图片描述   如果在应用运行期间禁用ARSession,系统将不再跟踪其环境中的特征点及相关功能,但如果稍后再启用,系统将尝试恢复以前检测到的特征点信息。选择“Attempt Update”,设备将在可能的情况下尝试安装AR软件,此功能的支持依赖于平台,在Andriod平台上,将尝试安装最新版的ARCore,在iOS平台上,将尝试安装最新版的ARKit。

  特别需要注意的是,在任何一个AR应用中,有且仅允许有一个Session,因此Unity将Session设成一个全局组件,因此如果场景中有多个ARSession,那这些ARSession组件都将尝试管理同一个Session。同样,AR Input Manager组件也只能有且仅有一个。

  移动手机平台设备各类繁多,不是每一个平台都支持ARFoundation,因此我们需要一些Session状态来表示平台的可用性,以便根据Session状态进行下步操作或者在设备不支持AR时可以提供替代的应用方案。

  要确定当前的Session状态(例如设备是否支持、是否正在安装AR软件以及Session是否工作),可以使用ARSessionState枚举类型,还可以在Session状态更改时订阅ARSession.stateChanged事件。ARSessionState枚举包括以下类型:

ARSessionState说明CheckingAvailability应用正在检测设备可用性。InstallingAR软件正在安装(这里指手机端的ARCore或者ARKit)。NeedsInstall设备支持AR,但需要安装相应软件(这里指手机端的ARCore或者ARKit)。None应用还未完成初始化,设备可用性未知。ReadyAR可用并已经准备好。SessionInitializingAR Session正在初始化,通常指AR在设备上可用,但AR应用目前还未收集到足够的环境信息。SessionTrackingSession正常运行并且处于正常跟踪状态。Unsupported设备不支持AR。

  因此, 我们可以通过以下代码来检测AR应用当前状态:

if (ARSession.state == ARSessionState.None || ARSession.state == ARSessionState.CheckingAvailability) { //设备状态未知 } if (ARSession.state == ARSessionState.Unsupported) { // 设备不支持AR } else { // 设备支持AR } (二)ARSessionOrigin

  AR Session Origin对象默认有一个Transform组件和一个AR Session Origin组件,如下图所示。

在这里插入图片描述   AR Session Origin组件的作用是将可跟踪对象(如平面和特征点)姿态信息转换为Unity场景中的最终位置、方向和比例。因为AR设备由Session管理,因此其获取的姿态信息在“session space(会话空间)”中,这是一个相对于AR Session开始的非标度空间,因此AR Session Origin执行一次坐标空间变换,将其变换到Unity坐标空间,这个类似于从模型局部空间到世界空间的变换,例如,在我们制作模型时,我们通常都会有模型自己的坐标系,模型的所有部件都相对于其自身的坐标系构建,模型自己的坐标系我们叫做“模型空间”或“局部空间”,当将这些模型导入到Unity中时,模型的所有顶点位置信息都要变换到以Unity坐标原点为参考的世界空间中。同样,由AR设备产生的可跟踪设备姿态在“Session Space”中,因此也要做一次坐标变换将其变换到Unity世界坐标空间中。

  AR Session Origin还接受一个摄像机参数,这个摄像机就是AR摄像机,AR摄像机与用户设备摄像机通过Tracked Pose Driver组件可以进行对齐,同时与AR session space对齐,这样才可以以正确的视角在特定位置渲染虚拟物体。

  为更方便的渲染虚拟物体,AR Session Origin还允许缩放虚拟物体和相对摄像机的偏移。如果要使用缩放或偏移功能,则摄像机必须要是AR Session Origin的子对象(默认就是子对象),摄像机由Session驱动,因此设置AR Session Origin的缩放与偏移,则摄像机和检测到的可跟踪对象也一起缩放与偏移。

  要将缩放应用于AR Session Origin,只需设置其Transform 中的Scale值,将偏移应用于AR Session Origin,只需设置其Transform 中的Position值,这里设置的缩放与偏移会影响所有虚拟物体的渲染,较大的Scale值将会使AR虚拟内容显示得更小,例如,10倍的Scale将使虚拟对象显示小10倍,而0.1将使虚拟对象显示大10倍。在需要整体缩放虚拟物体时可以考虑调整该值。

  AR Session Origin对象还有一个子对象AR Camera,AR Camera默认挂载Tracked Pose Driver 、AR Camera Manager、AR Camera Background,如下图所示。 在这里插入图片描述   Tracked Pose Driver 组件主要作用是将Unity中的场景摄像机与设备的真实摄像机对齐,即是根据设备真实摄像机的位置与方向来调整Unity中的场景摄像机姿态,通过与真实摄像机对齐匹配,Unity中场景摄像机与设备真实摄像机所有参数均一致(即拥有相同的投影矩阵),这样设置后真实摄像机与AR Session Space也是匹配的,由此来保证从Unity中渲染的虚拟物体在真实世界中的位置与姿态正确。反而言之,如果没有该组件,Unity渲染的虚拟物体将会在真实世界中杂乱无章。Tracked Pose Driver 组件还有一些控制参数,可以根据工程需要进行选择,甚至可以自己写姿态控制脚本。

  AR Camera Manage组件负责处理控制摄像机的一些细节参数,如表示纹理和控制光照估计模式。其有两个参数Focus Mode 和 Light Estimation Mode,相关意义如下表所示:

参数选项Focus Mode摄像机对焦模式,可以为“Auto”或“Fixed”,Auto即允许摄像机自动对焦,一般我们会选择此模式,Fixed即为固定焦距,固定焦距不会改变设备摄像机焦距,因此,与被拍摄物体距离不合适时就是出现模糊的现象。Light Estimation Mode光照估计模式,可以为“Disable”或“Ambient Intesity”,选择Ambient Intesity将启用光照估计功能,ARFoundation将根据真实世界中的光照信息来评估当前环境中的光照强度、光照颜色、光照方向等信息,这个评估每一帧都要进行,所以如果不需要光照估计功能时选择Disable可以节约资源。

  在AR中,我们以真实环境做为背景,因此我们需要将摄像机捕捉到的图像渲染成背景,使用AR Camera Background组件就可以轻松实现这个功能。AR Camera Background组件还有两个参数Use Custom Material和Use Custom Render Asset ,这两个参数均为可选项。Use Custom Material、Use Custom Material一般情况下我们都不用勾选,这个默认会由Unity根据平台来进行背景渲染,但如果勾选,我们就要提供背景渲染的材质、Shader,利用这两个选项可以实现一些高级功能,如背景模糊、描边等。

  如果在场景中只有一个AR Session Origin,我们可以简单的为其添加一个AR Camera Background就可以将摄像机的图像渲染成背景,但如果有多个AR Session Origin,有多个摄像机(例如在不同的缩放尺度上渲染场景),那么这时我们就要为每一个AR Session Origin、每一个摄像机指定一个AR Camera Background组件并进行相应设置。

  ARSession与ARSessionOrigin负责AR应用整个生命周期管理、AR摄像机头处理及背景渲染相关工作,这些工作是每一个AR应用都需要的,但这些工作需要与设备硬件交互,通常也会非常繁杂。这两个功能模块对此进行了良好封装处理,用户不用再担心具体的细节,这大大的简化了AR应用开发的难度。

参考文献

  About AR Foundation About AR Foundation



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有